#pragma once

#include <Common/Common.h>
#include <string>
#include <map>
#include <functional>
#include "HttpResMessage.h"
using namespace std;

struct HttpRequestCallback
{
    std::function<void(const CHttpResMessage &)>    OnSuccess;                  // [可选] 调用成功的回调函数
    std::function<void(Int32, const char*)>         OnFailed;                   // [可选] 接口调用失败的回调函数
    std::function<void()>                           OnCompleted;                // [可选] 接口调用完成的回调函数
};

class CHttpRequestParam
{
public:
    CHttpRequestParam();
    virtual ~CHttpRequestParam();

public:
    void SetServer(const CSocketAddr &addr);                                    // 设置服务器地址
    void SetUri(const string &strUri);                                          // 设置请求 Uri
    void SetMethed(const string &strMethod);                                    // 支持: GET/HEAD/POST/PUT/DELETE
    void AddHeader(const string &strField, const string &strValue);             // 设置自定义 Http 头
    void AddHeader(const string &strField, Int32 nValue);                       // 设置自定义 Http 头
    void AddHeader(const string &strField, Int64 lValue);                       // 设置自定义 Http 头
    void SetBody(const string &strBody, const string &strContentType);          // 设置请求正文
    void SetCallback(const HttpRequestCallback &callback);                      // 设置回调地址
    void SetTimeout(int nTimeout);                                              // 设置请求超时时间，单位: 毫秒

    const CSocketAddr& GetServer() const { return m_addr; }
    const string GetRequest() const;
    const HttpRequestCallback GetCallback() const { return m_callback; }
    Int32 GetTimeout() const { return m_nTimeout; }

protected:
    CSocketAddr             m_addr;
    string                  m_strUri;
    string                  m_strMethod;
    map<string, string>     m_mpHeaders;
    string                  m_strBody;
    Int32                   m_nTimeout;

    HttpRequestCallback     m_callback;
};
